home *** CD-ROM | disk | FTP | other *** search
/ The PC-SIG Library 10 / The PC-Sig Library - Shareware for the IBM PC and Compatibles (PC-SIG)(Tenth Edition Disks 1-2804)(1991).iso / PC_SIGCD / 20 / 5 / DISK2058.ZIP / UNFAST.EXE / PSCR.F < prev    next >
Text File  |  1980-01-01  |  3KB  |  142 lines

  1. ;===========================================================================
  2. ;Print screen utility.     ** This now combines SDUMP and DUMP3.
  3. ;===========================================================================
  4.  
  5. #short
  6.  
  7. x1=0:y1=0
  8. x2=79:y2=24
  9. dos 35(5):olds=reg es:oldo=reg bx
  10. setint 5 to printscr
  11. st=allocate 4096/16
  12. print bios "PSCR installed."
  13. stop resident
  14.  
  15. proc sdump
  16.     {
  17.     mode 640,and
  18.     lprint chr 27;chr '3';chr 24;
  19.     for y=0 to 199 step 8
  20.     lprint chr 27;chr '*';chr 5;chr 128;chr 2;
  21.     for x=0 to 639
  22.     bit=0
  23.     for a=0 to 7:bit*=2+(point x,y+a):next a
  24.     lprint chr(bit);
  25.     next x
  26.     lprint
  27.     next y
  28.     repeat 4 lprint
  29.     }
  30.  
  31. proc dump3
  32.     {
  33.     mode 320,and
  34.     lprint chr 27;chr '3';chr 22;
  35.     for y=0 to 199 step 4
  36.     lprint chr 27;chr '*';chr 5;chr 128;chr 2;
  37.     for x=0 to 319
  38.     bit=0:bit2=0
  39.     for a=0 to 3
  40.     bit*=4:bit2*=4
  41.     pp=point x,(y+a)
  42.     if pp=1 then bit+=1
  43.     if pp=2 then bit+=1:bit2+=2
  44.     if pp=3 then bit+=3:bit2+=3
  45.     next a
  46.     lprint chr bit;chr bit2;
  47.     next x:lprint
  48.     next y
  49.     repeat 4 lprint
  50.     }
  51.  
  52. proc clearit move 2000 from st|0 to video|0
  53.  
  54. proc corners
  55.     {
  56.     tx=x1:ty=y1
  57.     bx=x2:by=y2
  58.     if bx<tx then swap bx,tx
  59.     if by<ty then swap by,ty
  60.     }
  61.  
  62. proc displayit
  63.     {
  64.     corners
  65.     offset=tx*2+ty*160+1
  66.     repeat by-ty+1
  67.     {
  68.     push offset
  69.     repeat bx-tx+1
  70.         {
  71.         video[offset]=video[offset] xor 127
  72.         offset+=2
  73.         }
  74.     pop offset:offset+=160
  75.     }
  76.     }
  77.  
  78. proc print_screen
  79.     {
  80.     corners
  81.     for y=ty to by
  82.     for x=tx to bx
  83.     char=low (scrchr y,x)
  84.     reg dx=0,ax=char:int 17h
  85.     next x
  86.     reg dx=0,ax=10:int 17h
  87.     reg dx=0,ax=13:int 17h
  88.     next y
  89.     }
  90.  
  91.  
  92. printscr:
  93. pushall
  94. reg ds=reg cs
  95. if peekb 0|500h then goto exitscr
  96. video=0b800h-(800h*mono)+page*100h
  97. pokeb 0|500h,1
  98.  
  99. m=screen
  100. #long
  101. if m=4 then dump3
  102. else if m=6 then sdump
  103. else if m=3 then
  104.     {
  105. #short
  106.     move 2000 from video|0 to st|0
  107.  
  108.     pskey:
  109.     displayit
  110.     wait for keypressed
  111.     ks=keyscan:k=low ks
  112.     if k=27 then goto anp
  113.     if k=13 then print_screen:goto anp
  114.     clearit
  115.  
  116.     if (ks=19200) and (x2>0) then x2--
  117.     if (ks=19712) and (x2<79) then x2++
  118.     if (ks=18432) and (y2>0) then y2--
  119.     if (ks=20480) and (y2<24) then y2++
  120.  
  121.     if (k='4') and (x1>0) then x1--
  122.     if (k='6') and (x1<79) then x1++
  123.     if (k='8') and (y1>0) then y1--
  124.     if (k='2') and (y1<24) then y1++
  125.     goto pskey
  126.  
  127.     anp:
  128.     move 2000 from st|0 to video|0
  129.     }
  130. else
  131.     {
  132.     push psret,olds,oldo
  133.     retf
  134.     psret:
  135.     }
  136.  
  137. pokeb 0|500h,0
  138.  
  139. exitscr:
  140. popall
  141. iret
  142.